home *** CD-ROM | disk | FTP | other *** search
- /* 04-Aug-94 [olio] SUMSFolder now return WARN (5), if no msgs
- ** matched the filter..
- */
-
- #include "sumstl.h"
-
- #include <stdio.h>
-
- #include "umsfilter.h"
-
- #ifdef __SASC
- #include <dos.h>
- #endif
-
- /* SMAKE */
-
-
-
- // Version String
- // --------------
-
- static char VersionString[] = "$VER: sumsfolder "VERSION;
-
- static char UsageString[] = "\
- U=User : user name.\n\
- P=Password : user's password.\n\
- FI=Filter : filter specification.\n\
- FO=Folder : folder to set.\n\
- S=Server : server name.\n\
- Q=Quiet : work quietly\n\
- T=Tiny : use tiny output\n\n\
- ";
-
-
- // Template
- // --------
-
- static char *TemplateString = "U=User/A,P=Password/A,FI=Filter/A,FO=Folder/A,S=Server/K,Q=Quiet/S,T=Tiny/S";
- enum opts {
- OPT_USER, OPT_PASSWORD, OPT_FILTER, OPT_FOLDER, OPT_SERVER, OPT_QUIET, OPT_TINY,
- OPT_COUNT};
- static LONG opts[OPT_COUNT];
-
-
- // Globals
- // -------
-
- extern struct DosLibrary *DOSBase;
-
- struct Library *UMSBase = NULL;
- UMSAccount Account = NULL;
-
- struct BitSpec
- {
- char *name;
- LONG bit;
- BOOL global;
- };
-
- struct BitSpec BitSpecs[] =
- {
- {"Archive" , UMSUSTATF_Archive ,FALSE},
- {"Junk" , UMSUSTATF_Junk ,FALSE},
- {"PostPoned" , UMSUSTATF_PostPoned ,FALSE},
- {"Selected" , UMSUSTATF_Selected ,FALSE},
- {"Old" , UMSUSTATF_Old ,FALSE},
- {"WriteAccess", UMSUSTATF_WriteAccess,FALSE},
- {"ReadAccess" , UMSUSTATF_ReadAccess ,FALSE},
- {"ViewAccess" , UMSUSTATF_ViewAccess ,FALSE},
- {"Owner" , UMSUSTATF_Owner ,FALSE},
- {"UFlag0" , (1<<0 ) ,FALSE},
- {"UFlag1" , (1<<1 ) ,FALSE},
- {"UFlag2" , (1<<2 ) ,FALSE},
- {"UFlag3" , (1<<3 ) ,FALSE},
- {"UFlag4" , (1<<4 ) ,FALSE},
- {"UFlag5" , (1<<5 ) ,FALSE},
- {"UFlag6" , (1<<6 ) ,FALSE},
- {"UFlag7" , (1<<7 ) ,FALSE},
- {"UFlag8" , (1<<8 ) ,FALSE},
- {"UFlag9" , (1<<9 ) ,FALSE},
- {"UFlagA" , (1<<10) ,FALSE},
- {"UFlagB" , (1<<11) ,FALSE},
- {"UFlagC" , (1<<12) ,FALSE},
- {"UFlagD" , (1<<13) ,FALSE},
- {"UFlagE" , (1<<14) ,FALSE},
- {"UFlagF" , (1<<15) ,FALSE},
- {"Deleted" , UMSGSTATF_Deleted ,TRUE },
- {"Expired" , UMSGSTATF_Expired ,TRUE },
- {"Exported" , UMSGSTATF_Exported ,TRUE },
- {"Orphan" , UMSGSTATF_Orphan ,TRUE },
- {"Link" , UMSGSTATF_Link ,TRUE },
- {"HardLink" , UMSGSTATF_HardLink ,TRUE },
- {NULL,0,0 }
- };
-
- struct BitSpec *FindBit(char *name)
-
- {
- struct BitSpec *b=BitSpecs;
-
- while (b->name)
- {
- if (!stricmp(b->name,name)) return(b);
- b++;
- }
- return(NULL);
- }
-
-
- // CTRL-C Stuff
- // ------------
-
- int brk(void)
-
- {
- return 0;
- }
-
- // Main Function
- // -------------
-
- void main(int argc,char *argv[])
-
- {
- int erg=20;
- int anz;
- int fi;
- struct RDArgs *args_ptr;
-
- onbreak(brk);
-
- if ((argc<2) || (argv[1][0]=='?'))
- {
- struct BitSpec *b=BitSpecs;
- int i;
-
- fprintf (stderr,"\33[1m%s\33[0m, written by Matthias Scheler, Public Domain.\n\nTemplate: %s\n%s",
- &VersionString[6],TemplateString,UsageString);
- fprintf (stderr," bit-specs : ");
-
- i=0;
- while (b->name)
- {
- fprintf (stderr,"%s%c ",b->name,(b+1)->name ? ',' : '.');
- b++;
- if (++i==6)
- {
- i=0;
- fprintf (stderr,"\n ");
- }
- }
-
- fprintf (stderr,"\n\n");
- }
-
- {
- int i;
-
- for (i=0; i<OPT_COUNT; i++)
- opts[i]=NULL;
- }
-
- if (args_ptr = ReadArgs(TemplateString, opts, NULL))
- {
- if (UMSBase=OpenLibrary(UMSNAME,UMSVERSION))
- {
- if (Account=UMSRLogin((char *)opts[OPT_SERVER],(char *)opts[OPT_USER],(char *)opts[OPT_PASSWORD]))
- {
- if (!(fi=UmsFilterExpression((char *)opts[OPT_FILTER],Account,0,0,1)))
- {
- UMSMsgNum MsgNum;
- char *Fields[UMSNUMFIELDS];
-
- (void)UMSSelectTags(Account,
- UMSTAG_SelWriteLocal,TRUE,
- UMSTAG_SelUnset,2L,
- TAG_DONE);
- (void)UMSSelectTags(Account,
- UMSTAG_SelMask,
- UMSUSTATF_ViewAccess|UMSUSTATF_ReadAccess|UMSUSTATF_WriteAccess,
- UMSTAG_SelMatch,
- UMSUSTATF_ViewAccess|UMSUSTATF_ReadAccess|UMSUSTATF_WriteAccess,
- UMSTAG_SelWriteLocal,TRUE,
- UMSTAG_SelSet,2L,
- TAG_DONE);
-
- anz=0;
- while (MsgNum=UMSSearchTags(Account,
- UMSTAG_SearchLocal,TRUE,
- UMSTAG_SearchMask,3L,
- UMSTAG_SearchMatch,3L,
- TAG_DONE))
- {
- if (!UMSReadMsgTags(Account,
- UMSTAG_RMsgNum,MsgNum,
- UMSTAG_RNoUpdate,TRUE,
- UMSTAG_RTextFields,&Fields[0],
- UMSTAG_RReadAll,TRUE,
- TAG_DONE))
- {
- fprintf (stderr,"error reading message #%d: %s\n",MsgNum,UMSErrTxt(Account));
- break;
- }
-
- Fields[UMSCODE_Folder]=(char *)opts[OPT_FOLDER];
- if (!UMSWriteMsgTags(Account,
- UMSTAG_WMsgNum,MsgNum,
- UMSTAG_WNoUpdate,TRUE,
- UMSTAG_WTextFields,&Fields[0],
- TAG_DONE))
- {
- fprintf (stderr,"error writing message #%d: %s\n",MsgNum,UMSErrTxt(Account));
-
- UMSFreeMsg (Account,MsgNum);
- break;
- }
-
- UMSFreeMsg (Account,MsgNum);
- (void)UMSSelectTags(Account,
- UMSTAG_SelWriteLocal,TRUE,
- UMSTAG_SelMsg,MsgNum,
- UMSTAG_SelUnset,1L,
- TAG_DONE);
-
- if (SetSignal(0L,SIGBREAKF_CTRL_C)&SIGBREAKF_CTRL_C)
- {
- fprintf (stderr,"*** BREAK\n");
- break;
- }
-
- anz++;
- }
-
- if (MsgNum==0L)
- {
- if (!opts[OPT_QUIET])
- if (opts[OPT_TINY]) printf ("set folder for %d Msgs to \"%s\".\n",anz,(char *)opts[OPT_FOLDER]);
- else printf ("set folder for %d Msgs (%s) to \"%s\".\n",anz,(char *)opts[OPT_FILTER],(char *)opts[OPT_FOLDER]);
- erg=0;
- if (anz==0) erg=5;
- }
- }
- else fprintf (stderr,"\7Expression Error %ld\n",fi);
-
- UMSLogout( Account);
- }
- else fprintf (stderr,"\7UMS-Login failed.\n");
-
- CloseLibrary (UMSBase);
- }
- else fprintf (stderr,"\7Could not open %s V%d.\n",UMSNAME,UMSVERSION);
-
- FreeArgs(args_ptr);
- }
- else
- {
- PrintFault(IoErr(), NULL);
- exit(RETURN_ERROR);
- }
-
- exit (erg);
- }
-